#include "RegistroOcurrencia.h"

RegistroOcurrencia::RegistroOcurrencia() :
	_termino(""), _docID(0)
{
}

RegistroOcurrencia::RegistroOcurrencia(std::string term, unsigned int docID) :
	_termino(term), _docID(docID)
{
}

std::string RegistroOcurrencia::getTermino() const{
	return this->_termino;
}

unsigned int RegistroOcurrencia::getDocID() const{
	return this->_docID;
}

void RegistroOcurrencia::setTermino(std::string term){
	this->_termino = term;
}

void RegistroOcurrencia::setDocID(unsigned int docID){
	this->_docID = docID;
}


bool RegistroOcurrencia::operator<(const RegistroOcurrencia& ro) const {
	if (this->_termino < ro._termino) return true;
	else if (this->_termino > ro._termino) return false;

	// if (this->_termino == ro._termino
	return (this->_docID < ro._docID);
}

bool RegistroOcurrencia::operator>(const RegistroOcurrencia& ro) const {
	if (this->_termino > ro._termino) return true;
	else if (this->_termino < ro._termino) return false;

	// if (this->_termino == ro._termino
	return (this->_docID > ro._docID);
}

RegistroOcurrencia& RegistroOcurrencia::operator=(const RegistroOcurrencia& ro){
	this->_docID = ro._docID;
	this->_termino = ro._termino;

	return *this;
}

//-----------------------------------------------------------------------

std::fstream& operator<<(std::fstream& fout, RegistroOcurrencia& reg){
	unsigned char tamTerm = static_cast<unsigned char>( reg._termino.length() );

	fout.write(reinterpret_cast<char*>(&reg._docID), sizeof(reg._docID));
	fout.write(reinterpret_cast<char*>(&tamTerm), sizeof(tamTerm));
	fout.write(reg._termino.c_str(), reg._termino.length());

	return fout;
}

std::fstream& operator>>(std::fstream& fin, RegistroOcurrencia& reg){
		fin.read(reinterpret_cast<char*>(&reg._docID), sizeof(reg._docID));

		// Reconstruye el string con el termino
		unsigned char tamTermino = 0;
		fin.read(reinterpret_cast<char*>(&tamTermino), sizeof(tamTermino));
		char* term = new char[tamTermino+1]();
		fin.read(term, tamTermino);
		reg._termino = term;
		delete[] term;

		return fin;
}




